package com.hb.core.pojo.project.notice.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hb.core.pojo.project.file.dto.BidFileInfoDTO;
import com.hb.core.pojo.project.notice.dto.NoticeDTO;
import com.hb.core.pojo.project.notice.dto.NoticeListDTO;
import com.hb.core.pojo.project.notice.dto.NoticePortalDTO;
import com.hb.core.pojo.project.notice.entity.Notice;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 公告信息表 Mapper 接口
 * </p>
 *
 * @author zhaojk
 * @since 2021-08-30
 */
public interface NoticeMapper extends BaseMapper<Notice> {

    List<Notice> findNoticeBySectionIds(@Param(value = "sectionIds") List<Long> sectionIds, @Param(value = "noticeNature") Integer noticeNature);

    /**
     * 查询跟指定标段相关的所有公告
     *
     * @param notice
     * @return
     */
    List<NoticeDTO> listNoticeBySection(@Param("page") Page page, @Param("notice") NoticeDTO notice);

    /**
     * 查询指定标段ID的最新的一条公告
     * 只查询招标文件售卖起止时间不为空的
     *
     * @param sectionIds
     * @return
     */
    Notice getNoticeBySectionId(List<String> sectionIds);

    /**
     * 查询指定标段最后一次公告的开标时间
     *
     * @param sectionId
     * @return
     */
    Date findNoticeBidOpeningTimeBySectionId(@Param("sectionId") Long sectionId);

    /**
     * 查询指定标段的已发布的最后一次公告的开标时间
     *
     * @param sectionId
     * @return
     */
    Date findPublishNoticeBidOpeningTimeBySectionId(@Param("sectionId") Long sectionId);

    /**
     * @param sectionId: 标段id
     * @Description: 根据标段id查询首次公告
     * @Author: zhongdl
     * @Date:2021/12/8 10:27
     * @return: {@link NoticeDTO }
     **/
    NoticeDTO findFirstNoticeBySectionId(@Param("sectionId") Long sectionId);

    /**
     * @param pages:
     * @param noticeDTO:
     * @Description: 分页查询查询公告列表
     * @Author: zhongdl
     * @Date:2021/12/9 13:45
     * @return: {@link Page< NoticeDTO> }
     **/
    Page<NoticeDTO> findNoticeList(@Param("page") Page<NoticeDTO> pages, @Param("noticeDTO") NoticeDTO noticeDTO);

    /**
     * 查询跟指定项目下的所有标段有关系的公告
     *
     * @param pages     分页信息
     * @param projectId 项目ID
     * @param noticeNature 项目类型
     * @return
     */
    Page<NoticeDTO> pageNoticeByProjectId(@Param("page") Page<NoticeDTO> pages, @Param("projectId") Long projectId, @Param("noticeNature") Integer noticeNature);

    /**
     * 查询指定标段ID的公告分页信息
     *
     * @param pages     分页信息
     * @param sectionId 标段id
     * @param noticeNature 项目类型
     * @update zhaojk
     */
    Page<Notice> pageNoticeBySectionId(@Param("page") Page<Notice> pages, @Param("sectionId") Long sectionId, @Param("noticeNature") Integer noticeNature);


    /**
     * 查询标段最新的公告信息
     * @author tian
     * @date 2022-2-27 17:04
     * @param sectionId
     * @return com.hb.core.pojo.project.notice.entity.Notice
     */
    Notice getLastNoticeBySectionId(Long sectionId);


    /**
     *根据公告性质和项目类型查询公告
     * @param pages
     * @param noticePortalDTO
     * @return
     */
    Page<NoticePortalDTO> pageNotice(@Param("page") Page<NoticePortalDTO> pages, @Param("query") NoticePortalDTO noticePortalDTO);

    /**
     * 查询公告详情
     * @param noticePortalDTO
     * @return
     */
    NoticePortalDTO findNoticeByNoticeId(@Param("query") NoticePortalDTO noticePortalDTO);
    /**
     *
     * @Description: 查询所需要推送的公告
     * @Author: zhongdl
     * @Date:2022/2/23 9:26
     * @return: {@link List< NoticeDTO> }
     **/
    List<NoticeDTO> listPushNotice();

    List<Notice> listNoticeBySectionId(NoticeListDTO noticeListDTO);

    List<BidFileInfoDTO> selectReleaseBidFileByNoticeId(@Param("noticeId") Long noticeId);
}
